#ifndef _SE_MOUSEEVENT_
#define _SE_MOUSEEVENT_

#include "Events/InputEvent.h"

namespace SE
{
	class MouseEvent : public InputEvent
	{
	public:
		MouseEvent() = default;
		virtual ~MouseEvent() = default;
	};

	class MouseMoveEvent final : public MouseEvent
	{
	public:
		const Double x;
		const Double y;

		explicit MouseMoveEvent(
			const Double _x,
			const Double _y)
			: x(_x),
        	  y(_y) {}

		virtual ~MouseMoveEvent() = default;
	};

	class MouseButtonEvent final : public MouseEvent
	{
	public:
		const MouseButton 	button;
		const ButtonState 	state;

		explicit MouseButtonEvent(
			const MouseButton 	_button,
			const ButtonState 	_state)
			: button(_button),
			  state(_state) {}

		virtual ~MouseButtonEvent() = default;
	};

	class MouseScrollEvent final : public MouseEvent
	{
	public:
		const Double xoffset;
		const Double yoffset;

		explicit MouseScrollEvent(
			const Double _xoffest,
			const Double _yoffest)
			: xoffset(_xoffest),
			  yoffset(_yoffest) {}
		
		virtual ~MouseScrollEvent() = default;
	};
} // !namespace SE

#endif // !_SE_MOUSEEVENT_